package org.dhy.elasticsearch.interfaces;

import java.io.IOException;
import java.util.List;

interface EsRepository<T> {

    /**
     * 通过ID查找文档
     * @param id
     * @return
     */
    T findById(String id);

    /**
     * 检查索引存在与否，不存在创建
     */
    void checkIndex();

    /**
     * 搜索
     * 提供基础的分页搜索，标注为searchable的且采用ik的用模糊搜索，其他用精确搜索
     * @return
     */
    List<T> baseSearch(T o, Integer size) throws IOException, NoSuchFieldException, IllegalAccessException;

    /**
     * 分页搜索
     *
     * @return
     */
    List<T> basePagedSearch(T o, Integer pageSize, Integer pageNum) throws IOException, NoSuchFieldException, IllegalAccessException;

    /**
     * 插入数据，创建该数据的索引
     *
     * @param t
     */
    void insert(T t) throws NoSuchFieldException, IllegalAccessException;

    /**
     * 更新索引
     *
     * @param t
     */
    void update(T t);

    /**
     * 批量新增索引
     *
     * @param list
     */
    void bulkAdd(List<T> list);

    /**
     * 批量更新索引
     *
     * @param list
     */
    void bulkUpdate(List<T> list);

    /**
     * 删除文档
     * @param id
     */
    void delete(String id);
}
